查看原文
其他

【安全开发系列】宣布出圈! 序章:让安全融入其生命之中

alkaid 安恒信息 2022-05-12


网络世界千变万化的当下,网络安全问题也如雨后春笋般接踵而至。这些安全问题从何而来?

其中最常见的源头大概非软件开发莫属了

一款软件如果是在漏洞百出、安全得不到保障的环境中出生和成长,那么迟早有一天,它会像定时炸弹一般爆炸,剩下一堆遗臭万年的残渣。

因此,想要从源头上解决软件开发的安全问题,必须将安全植入开发根源,为软件打造一个尽可能安全、健康的环境。

于是,安恒信息《安全开发系列》文章出世了,以安全为宗旨和目标,呵护软件安全出世、健康成长。


本系列文章共分了7篇(包括序章在内),后续6篇文章的内容结构基本如下:

1、上一章节的概要总结,达到承上的目的

2、核心内容围绕三个部分, 现状、道、术

3、下一章节的预告,达到启下的目的


系列文章的名字采用了古代锻造刀剑工艺的名称作为章节名称,分别是铸范、烧刃、 淬火、磨光、钢磨、鎏金 、锻打, 同时以四类安全能力(安全规划能力、安全实现能力、安全验证能力、安全数据分析能力)为分类方式。

具体名称如下:

安全开发系列-安全规划能力 铸范篇

安全开发系列-安全实现能力 烧刃篇

安全开发系列-安全验证能力(代码) 淬火篇

安全开发系列-安全验证能力(应用与环境)磨光篇 

安全开发系列-安全数据分析能力 鎏金篇

安全开发系列-安全开发基石 锻打篇

从多个不同角度分别阐述安全开发所需要具备的条件,为广大读者提供相关思路的参考。



序章:让安全融入其生命之中



_

机器,正在生物化;而生物,正在工程化。
这种趋势正验证着某些古老的隐喻——将机器比喻为生物,将生物比喻为机器。那些比喻由来已久,古老到第一台机器诞生之时。如今,那些久远的隐喻不再只是诗意的遐想,它们正在变为现实。


——《失控》


_



01

前言


早期的软件仅仅是以处理数值计算为任务,而当代的软件依托云计算技术摆脱了硬件的限制,又吸纳了海量数据,已然是虚拟网络之中的无形生命,为无数人提供各种各样的服务。

既然是生命如此复杂运作的系统,那不可避免地会出现各种病症,各种各样的小错误。无数科学家在研究如何从生命的密码——基因方向解决问题,从生命诞生初期就尽量避免可能存在的缺陷,那样,成长的过程会更加顺利。

对于当代软件这类庞然大物也是一样,从其生命周期的初始——一个小小的想法开始,安全就应当注入其中,同软件其他的必要条件(健壮性、可用性等)一起融入其生命之中。



02

概念


已假定读者均有一些软件安全/信息安全/网络安全方面的基本知识, 在后续系列文章中也会使用这个假设。


安全开发

一般而言,安全开发有两类含义:

  1. 从事开发安全软件的研发人员所做之事;

  2. 为实现开发安全的软件而做的事情。

本系列文章在没有额外说明的情况下,均指第二种含义。

SDL/SDLC/S-SDLC

SDL:  security development lifecycle (安全开发生命周期),由微软提出;

SDLC: 软件开发生命周期;

S-SDLC: Secure Software Development Lifecycle(安全软件开发生命周期), 由OWASP提出。

以上三者在本系列文章可能存在混用的情况,本质上均指围绕软件工程设计的一系列安全活动。

DevSecOps

DevSecOps:本文所述DevSecOps为其最初的含义(技术理念),不具体指任何一项技术或者软件产品。



03

技术理念与方法论


在具体分析安全开发之前,我打算先简单聊聊安全开发相关的技术理念和方法论。


方法论


一说到方法论、技术理念肯定会有人跳起来骂:扯犊子、吹牛逼、瞎搞骗钱、没有实际应用价值。但是如果真的完全是这样,这样的方法和理论为什么不会消失?而方法论是哲学中的重要概念之一,它真的会没什么价值吗?我们反对的是方法论本身,还是以方法论作躯壳的空虚灵魂。

方法论是一种以解决问题为目标的理论体系或系统,通常涉及对问题阶段、任务、工具、方法技巧的论述,是普遍适用于各门具体社会科学并起指导作用的范畴、原则、理论、方法和手段的总和。

将问题放到方法论里分析,从而得到针对某个具体问题的系统化体系化的解决方式,是我们使用方法论的重要方式。


SDL


微软也好,OWASP也好,提出的SDL其实更多像是方法论一类的东西,它为我们提供了做安全开发的整体框架,既然是骨架,那么无法避免地就会缺少肉体部分,所以整个SDL理念仅仅提及了我们做安全开发可能需要去做哪一些事情,没有涉及这些事情具体是如何去做的,比如应当由人工完成,还是工具完成,亦或是暂时不去执行,也没有涉及到这些事情应该如何规划实现,先做哪些,后做哪些。

SDL是一个技术的理念,更偏向于实际指导,它告诉我们可以如何去实现安全开发,但是没有告诉我们如何从实施的角度一步步推进。

所以这里也产生了本系列文章的第一个抱歉:哪怕我尽我所能地详细刻画和描述实现安全开发的方式方法还有技术,但是由于所处的土壤不一样,它注定还是无法作为通用性的实施指导,只能为大家提供思路上的参考。


DevSecOps


这里还是要再三说明,若本系列文章所述DevSecOps与您所理解的DevSecOps有所不同,您可以按您自己的想法选择,但是本系列文章会引用下文描述的DevSecOps。不过同时我想概念也只不过是为了提高沟通效率的工具,我们都应该更关注概念之下的本质以及这些东西是否能为我们所用


DevSecOps源于DevOps, 从组成成分上其实是将三个英文单词——Development、Security、Operations糅合在一起,其最直接的含义就是加强三个团队之间的合作,令三个团队看起来像是一个团队那样统一。各个文章解释可能都有所不同,有人说它是自动化技术的代表,有人说它是安全左移的代表,我倾向于表达DevSecOps更多的是一种软件开发文化。可要是这么去解释,那么严谨一点的话,就需要知道文化(Culture)是什么。


维基百科(英语单词,所以采纳了这个来源):文化被认为是人类学的一个中心概念,涵盖了人类社会中通过社会学习传播的各种现象。在所有人类社会中都发现了文化共性。这些措施包括表现形式就像艺术,音乐,舞蹈,祭祀,宗教等以及技术工具的使用,像烹饪,住房和服装。物质文化的概念涵盖文化的物理表达,例如技术,建筑和艺术,而文化的非物质方面,例如社会组织的原则(包括政治组织和社会机构的实践),神话,哲学,文学(书面和口头),和科学包括非物质文化遗产社会的。



从此可以看出其大致的含义便是描述了一种极为理想的情况,情况可以描述成以下几种情景:

1、软件开发、安全、软件运维,具备某项机制和流程,能够高效的互相配合,同时形成了一些固化的东西

2、软件开发、安全、软件运维三个团队应该具备一个共同目标,至少是一个相近的目标,类似于开发一款安全的软件

3、新加入成员通过一些学习和实践,应该能快速地融入这样的环境,类似于人融入社会一样。

无论哪一项都不是仅仅通过某一款或者某一些工具能够轻易实现的,DevSecOps技术想要达到的理想目标远比表面上要更加深远,它想将这些东西渗入到每个人的习惯、思想当中,而技术工具仅仅只是它的支撑,为了实现目标的必需品。

所以,在讨论DevSecOps之时,我们是否真正意识到了这其中的难度,是否真的准备好了转型DevSecOps。

同时,想要去实现这样深度的变革,我们是否得到了高层强有力的支持?


关键思路


安全开发与DevSecOps

如果说DevSecOps是未来必然走向的目标的话,那么安全开发必然是无法绕开的一个阶段,甚至可以说是其核心模块。

从被普遍接受的DevSecOps三者排序而言,研发为先、安全次之、运维最后,这不仅仅象征着软件生命周期中的团队顺序,从某种程度上也是工作量的排序,越来越多不确定性的工作内容将被限制在软件研发阶段,由 XXX as Code 思想进行固化,而发布的自动化程度越来越高,所以研发或者说开发这个行为会越来越重要,而安全开发也是如此。

扯得有点远,回到重点。目前趋势之下,安全开发的关键思路是什么?

无论是DevSecOps在文化层面的乌托邦,还是SDL的方法,其实我们都在探讨安全如何融于现有的框架当中,想要融入到这样的体系中,那么特征上必然是要相恰的,不能冲突。势必需要解决安全风险属性的不确定性,如果不具有明确的内容,很难与研发框架融合,那样必然会产生大量摩擦。

基本上需要围绕以下两点去做:

1、团队所有人能对安全负责

2、通过一套明确的机制或者安全工程来生产安全的软件

另外一点,便是受限于资源与人才而提出的——高效要求(高复用,高自动化)



04

总结


《安全开发系列-序章(一)》更多的是起一个系列文章的头,将我们整体的思路和框架定下来,也让我们与读者建立起一些共识,特别是在目前各类技术概念频出的背景下,深刻了解我们所讨论对象的本质是什么显得尤为重要。



05

预告


安全开发系列-安全规划能力 (铸范篇)

将安全纳入软件生命周期中,关键点之一就是能否将安全性纳入到软件设计的初期、甚至雏形阶段,而这个阶段最重要的是能够尽可能地明确一样地东西,刻画出哪些需要安全,需要什么样的安全。

本章节将重点围绕着这方面的内容进行介绍(可能会涉及到公司的一些产品和技术)。



往期精选


围观

关键信息基础设施“挂图作战”, 平战一体化实践


热文

别让API安全成为数字化转型的绊脚石


热文

2021“西湖论剑”十大创新案例公布


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存